home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / programm.ing / m2gem106.lzh / CRYSTAL1.06 / CMP / TDIM2 / PD / PV_TEST.MOD < prev    next >
Encoding:
Text File  |  1994-01-24  |  2.9 KB  |  90 lines

  1. MODULE PVTEST;
  2. (* RS 24.1.94 *)
  3. (* Demonstriert den Compiler-Bug bezügl. indizierter Funktionen-Variablen. *)
  4. (*$Q+*)
  5.  
  6. IMPORT VT,VZ;
  7.  
  8. TYPE CD = CARDINAL;
  9.      IG = INTEGER;
  10.      FP = PROCEDURE(): CD;
  11.      P1 = PROCEDURE (VAR IG);
  12.      FA = ARRAY [21..23] OF FP;
  13.      Meths = RECORD R1: P1; FP: FA END;
  14.  
  15. VAR  iP: ARRAY [0..7] OF Meths;
  16.      j:  IG;
  17.  
  18. PROCEDURE R0 (VAR x: IG); BEGIN VT.wT (" Function-Test: ") END R0;
  19.  
  20. PROCEDURE F3 (): CD; BEGIN RETURN 43 END F3;
  21.  
  22. PROCEDURE Act0 (i: IG): CD; BEGIN RETURN iP[7].FP[i]() END Act0;
  23.  
  24. PROCEDURE Act1 (i: IG): CD;
  25.                  VAR f: FP; BEGIN f := iP[7].FP[i]; RETURN f () END Act1;
  26.  
  27. PROCEDURE Init;
  28.  BEGIN WITH iP[0] DO R1 := R0; FP[21] := F3; FP[22] := F3; FP[23] := F3 END;
  29.    FOR j := 1 TO 7 DO iP[j] := iP[0] END; END Init;
  30.  
  31. BEGIN  Init;
  32.        VT.Home; VT.Ln; VT.Ln;
  33.        iP[4].R1 (j);
  34.   j := iP[7].FP[23](); VZ.wDecW (j, 3);
  35.   j := Act0 (23);      VZ.wDecW (j, 3);
  36.   j := Act1 (23);      VZ.wDecW (j, 3);
  37.   VZ.Pause; END PVTEST.
  38.  
  39.  
  40. Auszug aus dem Dis-Assembling:
  41.  
  42. Act0: procnum = 3
  43.  
  44.     0H   7000                     MOVEQ   #00H,D0
  45.     2H   4EB9 0000 0000           JSR     00000000H
  46.     8H   4E56 0000                LINK    A6,#0000H
  47.  
  48.     CH   3A2E 0008                MOVE.W  0008(A6),D5
  49.    10H   0445 0015                SUBI.W  #0015H,D5
  50.    14H   4BBC 0002                CHK     #0002H,D5
  51.    18H   E545                     ASL.W   #2,D5
  52.    1AH   49F9 0000 0074           LEA     00000074H,A4
  53.  > 20H   48E7 0408                MOVEM.L {A4,D5},-(A7)
  54.  
  55.    24H   558F                     SUBQ.L  #2,A7
  56.    26H   2874 5000                MOVE.L  00H(A4,D5.W),A4
  57.    2AH   4E94                     JSR     (A4)
  58.  > 2CH   3A1F                     MOVE.W  (A7)+,D5
  59.  
  60.  > 2EH   4CDF 1020                MOVEM.L (A7)+, {D5,A4}
  61.  > 32H   3D45 000A                MOVE.W  D5,000A(A6)
  62.  
  63.    36H   4E5E                     UNLK    A6
  64.    38H   4E75                     RTS
  65.    3AH   7001                     MOVEQ   #01H,D0
  66.    3CH   4EB9 0000 0000           JSR     00000000H
  67.  
  68. Act1: procnum = 4
  69.  
  70.     0H   7004                     MOVEQ   #04H,D0
  71.     2H   4EB9 0000 0000           JSR     00000000H
  72.     8H   4E56 FFFC                LINK    A6,#FFFCH
  73.  
  74.     CH   3A2E 0008                MOVE.W  0008(A6),D5
  75.    10H   0445 0015                SUBI.W  #0015H,D5
  76.    14H   4BBC 0002                CHK     #0002H,D5
  77.    18H   E545                     ASL.W   #2,D5
  78.    1AH   49F9 0000 0074           LEA     00000074H,A4
  79.    20H   2D74 5000 FFFC           MOVE.L  00H(A4,D5.W),FFFC(A6) ; f
  80.  
  81.    26H   558F                     SUBQ.L  #2,A7
  82.    28H   286E FFFC                MOVE.L  FFFC(A6),A4
  83.    2CH   4E94                     JSR     (A4)
  84.    2EH   3D5F 000A                MOVE.W  (A7)+,000A(A6)
  85.  
  86.    32H   4E5E                     UNLK    A6
  87.    34H   4E75                     RTS
  88.    36H   7001                     MOVEQ   #01H,D0
  89.    38H   4EB9 0000 0000           JSR     00000000H
  90.